#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
API配置文件
统一管理所有平台的后端API配置参数
"""

import os
from typing import Dict, Any
from faker import Faker

def get_random_ua():
    """获取随机User-Agent"""
    fake = Faker()
    return fake.user_agent()

class APIConfig:
    """API配置类"""
    
    # ==================== 后端API配置 ====================
    
    # 后端服务器配置
    API_HOST = os.getenv('API_HOST', '192.168.5.12')  # 支持环境变量
    API_PORT = os.getenv('API_PORT', '8000')
    API_PROTOCOL = os.getenv('API_PROTOCOL', 'http')
    
    # API路径配置
    API_BASE_PATH = '/api/v1'
    API_PRODUCTS_ENDPOINT = '/products/batch_add_processed_products/'
    
    # 构建完整的API URL
    @classmethod
    def get_api_base_url(cls) -> str:
        """获取API基础URL"""
        if cls.API_PORT and cls.API_PORT not in ['', '80', '443']:
            return f"{cls.API_PROTOCOL}://{cls.API_HOST}:{cls.API_PORT}{cls.API_BASE_PATH}"
        else:
            return f"{cls.API_PROTOCOL}://{cls.API_HOST}{cls.API_BASE_PATH}"
    
    @classmethod
    def get_products_api_url(cls) -> str:
        """获取商品提交API的完整URL"""
        return f"{cls.get_api_base_url()}{cls.API_PRODUCTS_ENDPOINT}"
    
    # ==================== 请求配置 ====================
    
    # 请求超时设置
    REQUEST_TIMEOUT = 120  # 秒
    
    # 重试配置
    MAX_RETRIES = 3
    RETRY_DELAY = 1.6  # 秒
    
    # 请求头配置
    DEFAULT_HEADERS = {
        'Content-Type': 'application/json',
        'User-Agent': get_random_ua()
    }
    
    # ==================== 平台映射配置 ====================
    
    # 平台名称映射（用于API提交时的platform字段）
    PLATFORM_MAPPING = {
        '拼多多': 'PDD',
        '京东': 'JD', 
        '淘宝': 'TaoBao',
        '抖音': 'DY'
    }
    
    # ==================== 调试配置 ====================
    
    # 是否启用详细日志
    ENABLE_VERBOSE_LOGGING = True
    
    # 是否打印API请求详情
    ENABLE_REQUEST_LOGGING = True
    
    # 是否打印API响应详情
    ENABLE_RESPONSE_LOGGING = True
    
    # ==================== 数据处理配置 ====================
    
    # 批量提交配置
    BATCH_SIZE = 10  # 每批次提交的商品数量
    
    # 数据清理配置
    MAX_PRODUCT_NAME_LENGTH = 255
    MAX_PRODUCT_DATA_LENGTH = 10000
    
    @classmethod
    def get_config_summary(cls) -> Dict[str, Any]:
        """获取配置摘要"""
        return {
            'api_url': cls.get_products_api_url(),
            'timeout': cls.REQUEST_TIMEOUT,
            'max_retries': cls.MAX_RETRIES,
            'batch_size': cls.BATCH_SIZE,
            'verbose_logging': cls.ENABLE_VERBOSE_LOGGING
        }
    
    @classmethod
    def validate_config(cls) -> bool:
        """验证配置是否有效"""
        try:
            # 检查必要的配置项
            if not cls.API_HOST:
                raise ValueError("API_HOST 不能为空")
            # if not cls.API_PORT:  移除此验证 (正式环境不需要此验证)
            #     raise ValueError("API_PORT 不能为空")
            
            # 检查URL格式
            url = cls.get_products_api_url()
            if not url.startswith(('http://', 'https://')):
                raise ValueError(f"无效的API URL格式: {url}")
            
            return True
            
        except Exception as e:
            print(f"❌ API配置验证失败: {e}")
            return False
    
    @classmethod
    def print_config(cls):
        """打印当前配置"""
        print("\n" + "="*60)
        print("🔧 API配置信息")
        print("="*60)
        print(f"🌐 API地址: {cls.get_products_api_url()}")
        print(f"⏱️  请求超时: {cls.REQUEST_TIMEOUT}秒")
        print(f"🔄 最大重试: {cls.MAX_RETRIES}次")
        print(f"📦 批量大小: {cls.BATCH_SIZE}个商品/批")
        print(f"📝 详细日志: {'启用' if cls.ENABLE_VERBOSE_LOGGING else '禁用'}")
        print(f"🔍 请求日志: {'启用' if cls.ENABLE_REQUEST_LOGGING else '禁用'}")
        print(f"📄 响应日志: {'启用' if cls.ENABLE_RESPONSE_LOGGING else '禁用'}")
        print("="*60)

# ==================== 环境变量配置说明 ====================
"""
可以通过以下环境变量来覆盖默认配置:

Windows:
set API_HOST=your-api-host.com
set API_PORT=8080
set API_PROTOCOL=https

Linux/Mac:
export API_HOST=your-api-host.com
export API_PORT=8080
export API_PROTOCOL=https

Python代码中:
import os
os.environ['API_HOST'] = 'your-api-host.com'
"""

# 验证配置
if __name__ == "__main__":
    print("🎯 API配置验证")
    APIConfig.print_config()
    
    if APIConfig.validate_config():
        print("✅ 配置验证通过")
    else:
        print("❌ 配置验证失败") 